package com.xxxx.yeb.service.impl;

import com.xxxx.yeb.mapper.EmployeeMapper;
import com.xxxx.yeb.pojo.Joblevel;
import com.xxxx.yeb.mapper.JoblevelMapper;
import com.xxxx.yeb.pojo.RespBean;
import com.xxxx.yeb.service.IJoblevelService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author zhoubin
 * @since 2020-07-17
 */
@Service
public class JoblevelServiceImpl extends ServiceImpl<JoblevelMapper, Joblevel> implements IJoblevelService {

    /**
     * 获取joblevelMapper实例
     */
    @Resource
    private JoblevelMapper joblevelMapper;

    @Autowired
    private EmployeeMapper employeeMapper;

    /**
     * 查询所有的职称信息
     * @return
     */
    @Override
    public List<Joblevel> selectAllJobLevel() {

       return joblevelMapper.selectAllJobLevel();

    }

    /**
     * 批量删除职称信息
     * @param ids
     * @return
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public RespBean deleteJobLevelBatch(Integer[] ids) {
        if (null==ids||ids.length==0){
            return RespBean.error("待删除记录不存在！");
        }

        int count = employeeMapper.countJoblevel(ids);

        int updateNum = employeeMapper.updateJobLevelId(ids);

        int delNum = joblevelMapper.deleteBatchByIds(ids);

        if (updateNum != count || ids.length!=delNum){
            return RespBean.error("删除记录失败！");
        }

        return RespBean.success("删除记录成功!");

    }

    /**
     * 职称信息修改
     * @param joblevel
     * @return
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public RespBean updateJobLevel(Joblevel joblevel) {
        Joblevel temp = joblevelMapper.selectJobLevelByName(joblevel.getName());
        //判断名称是否可用
        if (null != temp && !temp.getId().equals(joblevel.getId())){
            return RespBean.error("职称名称已被占用，无法使用");
        }
        int num = joblevelMapper.updateById(joblevel);

        if (num != 1){
            return RespBean.error("信息修改失败！");
        }
        return RespBean.success("职称信息修改成功");
    }

    /**
     * 新增职称信息
     * @param joblevel
     * @return
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public RespBean addJobLevel(Joblevel joblevel) {
//        判断非空
        if (StringUtils.isBlank(joblevel.getName())){
            return RespBean.error("职称名称不能为空");
        }

        if (StringUtils.isBlank(joblevel.getTitleLevel())){
            return RespBean.error("职称级别不能为空");
        }
//        判断职称名称是否被占用
        Joblevel temp = joblevelMapper.selectJobLevelByName(joblevel.getName());
        if (null != temp){
            return RespBean.error("该职称名称已被占用，无法使用");
        }

//        设置创建时间
        joblevel.setCreateDate(new Date());
//        设置enable ,这边修改了joblevel的参数类型boolean->integer
        joblevel.setEnabled(true);

        int flag = joblevelMapper.insert(joblevel);
        if (flag!=1){
            return RespBean.error("职称添加失败！");
        }
        return RespBean.success("职位添加成功");
    }


}
